<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>reduce方法</title>
</head>
<body>
    <script>
        let arr = [1,2,3,4,5];
        // reduce方法中，pre是上一次的返回值(如果没有返回值，返回undefined)，第一次，pre的值为第一个元素，value的值为第二个元素
        arr.reduce(function (pre,value,index,array) {
            console.log(pre,value)
        });


        // reduce方法中,reduce的第二个参数是pre第一次的值,value第一次的值为数组第一个元素,会比上面没有第二个参数的多返回一次
        arr.reduce(function (pre,value,index,array) {
            console.warn(pre,value);
            return 88;
        },0);


        // 例：数组中的某一个元素出现了几次
        let array = [1,2,3,1,2,1,5,1];
        function times(array,param) {
            return array.reduce(function (totle,value) {
               return totle += (value == param) ? 1 : 0; 
            },0);
        };
        console.log(times(array,2));


        // 例：数组中的最大值
        let array1 = [45,543,56,765,3422,77];
        function maxVal(array) {
            return array.reduce(function (pre,value) {
                return pre < value ? value : pre;
            })
        }
        console.log(maxVal(array1));


        
        // 例：查看购物车最贵的商品,购物车商品价格的汇总
        let cart = [
            {name:'防晒',price:199},
            {name:'防晒',price:199},
            {name:'眼霜',price:899},
            {name:'面霜',price:699},
            {name:'卫衣',price:269}
        ];

        function maxPrice(array) {
            return array.reduce(function (pre,value) {
                return (pre.price > value.price) ? pre : value;
            });
        }
        console.log(maxPrice(cart));

        function totalPrice(array) {
            return array.reduce(function (totle,value) {
               return totle += value.price;  
            },0)
        }
        console.log(totalPrice(cart));



        // 例：查看购物车中价格大于500的产品
        function filterGoods(array,price){
            return array.reduce(function (arr,val) {
               if (val.price > price){
                    arr.push(val); 
               };
               return arr;
            },[]).map(function (value) {
                return value.name;
            })
        }

        console.log(filterGoods(cart,500));



        // 例：去除购物车内重复的商品
        function removeSameGoods(array) {
            return array.reduce(function (arr,val) {
                let find = arr.find(function (item) {
                    return item.name == val.name;
                });
                if(!find){
                    arr.push(val);
                };
                return arr;
            },[]).map(function (value) {
                return value.name;
            })
        };
        console.log(removeSameGoods(cart));
    </script>
</body>
</html>